package com.sykj.cloud.system.service;

import com.sykj.cloud.system.api.domain.OrgDept;
import com.sykj.cloud.system.domain.vo.TreeSelect;

import java.util.List;

/**
 * 组织部门Service接口
 *
 * @author mr.will
 * @date 2021-03-15
 */
public interface IOrgDeptService
{

    /**
     * 新增组织部门
     *
     * @param orgDept 组织部门
     * @return 结果
     */
    int insertOrgDept(OrgDept orgDept);

    /**
     * 修改组织部门
     *
     * @param orgDept 组织部门
     * @return 结果
     */
    int updateOrgDept(OrgDept orgDept);

    /**
     * 批量删除组织部门
     *
     * @param guids 需要删除的组织部门ID
     * @return 结果
     */
    int deleteOrgDeptByIds(String[] guids);

    /**
     * 删除组织部门信息
     *
     * @param guid 组织部门ID
     * @return 结果
     */
    int deleteOrgDeptById(String guid);

    /**
     * 查询组织部门
     *
     * @param guid 组织部门ID
     * @return 组织部门
     */
    OrgDept getOrgDeptById(String guid);

    /**
     * 查询组织部门列表
     *
     * @param orgDept 组织部门
     * @return 组织部门集合
     */
    List<OrgDept> listOrgDepts(OrgDept orgDept);

    /**
     * 构建前端所需要树结构
     *
     * @param depts 部门列表
     * @return 树结构列表
     */
    List<OrgDept> buildDeptTree(List<OrgDept> depts);

    /**
     * 构建前端所需要下拉树结构
     *
     * @param depts 部门列表
     * @return 下拉树结构列表
     */
    List<TreeSelect> buildDeptTreeSelect(List<OrgDept> depts);

    /**
     * 根据角色ID查询部门树信息
     *
     * @param roleId 角色ID
     * @return 选中部门列表
     */
    List<String> listDeptsByRoleId(String roleId);


    /**
     * 根据ID查询所有子部门（正常状态）
     *
     * @param deptId 部门ID
     * @return 子部门数
     */
    int selectNormalChildrenDeptById(Long deptId);

    /**
     * 是否存在部门子节点
     *
     * @param deptId 部门ID
     * @return 结果
     */
    boolean hasChildByDeptId(Long deptId);

    /**
     * 查询部门是否存在用户
     *
     * @param deptId 部门ID
     * @return 结果 true 存在 false 不存在
     */
    boolean checkDeptExistUser(Long deptId);

    /**
     * 校验部门名称是否唯一
     *
     * @param dept 部门信息
     * @return 结果
     */
    String checkDeptNameUnique(OrgDept dept);


}
